package com.woniu.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu.entity.SysOperateLog;
import reactor.core.publisher.Mono;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;

/**
 * @Author pml
 * @Date 2025/6/19 15:27
 * @Description TODO
 * 操作日志服务接口
 * 扩展IService以支持响应式编程模型
 */
public interface SysOperateLogService extends IService<SysOperateLog> {
    /**
     * 响应式保存操作日志
     * @param operateLog 操作日志对象
     * @return 保存结果(Mono包装的Boolean)
     */
    Mono<Boolean> saveOperateLog(SysOperateLog operateLog);

    /**
     * 批量查询操作日志
     * 覆盖父接口方法以添加更详细的JavaDoc注释
     * @param logIds 日志ID集合
     * @return 日志列表
     */
    List<SysOperateLog> listByIds(Collection<? extends Serializable> logIds);

    /**
     * 根据用户ID查询操作日志
     * 管理员需要查看特定用户的操作历史，因此添加此方法
     * @param userId 用户ID
     * @return 该用户的操作日志列表
     */
    List<SysOperateLog> listByUserId(Integer userId);

    /**
     * 根据模块查询操作日志
     * 系统审计时经常需要按模块分类查看操作，如用户管理、任务管理等
     * @param module 模块名称
     * @return 该模块的操作日志列表
     */
    List<SysOperateLog> listByModule(String module);

    /**
     * 根据时间范围查询操作日志
     * 用于生成系统操作报表或审计特定时间段的操作
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 时间范围内的操作日志列表
     */
    List<SysOperateLog> listByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 清理过期操作日志
     * 操作日志会记录大量系统行为，定期清理可防止表空间过大
     * @param days 保留最近天数，超过此天数的日志将被删除
     * @return 清理的记录数
     */
    int cleanExpiredLogs(int days);
}
